package com.etalk.crm.service;

import com.alibaba.fastjson.JSONObject;
import com.etalk.crm.pojo.Agents;
import com.etalk.crm.pojo.GrabOrderLogs;
import com.etalk.crm.pojo.GradeLevel;
import com.etalk.crm.pojo.LessonAndTeacher;
import com.etalk.crm.pojo.Person;
import com.etalk.crm.pojo.PersonParamter;
import com.etalk.crm.pojo.Stores;
import com.etalk.crm.pojo.StuPreferences;
import com.etalk.crm.pojo.StudentInfo;
import com.etalk.crm.pojo.StudentScholarship;
import com.github.pagehelper.PageInfo;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @Auther: James
 * @Date: 2019/1/18 10:36
 * @Description:
 */
public interface PersonService {

    /*
     * @Author James
     * @Description 活动列表
     * @Date 10:37 2019/1/18
     * @Param
     * @return
     **/
    List<Map<String, Object>> selectExperienceInfo(Integer state);

    /*
     * @Author James
     * @Description 店铺列表
     * @Date 10:25 2019/1/18
     * @Param
     * @return
     **/
    List<Stores> storesList();

    /*
     * @Author James
     * @Description 查询所属代理
     * @Date 10:51 2019/1/18
     * @Param
     * @return
     **/
    List<Agents> agentsList();

    /**
     * @param
     * @return
     * @Author James
     * 查询渠道分类信息，学员列表查询用
     */
    List<Map<String, Object>> channeList();


    /*
     * @Author James
     * @Description 查询学员回访状态列表
     * @Date 15:32 2019/1/18
     * @Param
     * @return
     **/
    List<Map<String, Object>> selectRevisitInfo(Integer state);

    /*
     * @Author James
     * @Description 查询学员信息
     * @Date 19:07 2019/1/18
     * @Param
     * @return
     **/
    StudentInfo searchStudentInfoById(int personId);

    /*
     * @Author James
     * @Description 查询学员信息
     * @Date 19:07 2019/1/18
     * @Param
     * @return
     **/
    StudentInfo selectStudentInfoByPersonId(int personId);

    /*
     * @Author James
     * @Description 修改学员密码 信息
     * @Date 16:33 2019/1/21
     * @Param
     * @return
     **/
    int updateByPersonId(StudentInfo studentInfo);


    /*
     * @Author James
     * @Description 修改学员基本 信息
     * @Date 16:33 2019/1/21
     * @Param
     * @return
     **/
    int updateStuInfo(StudentInfo studentInfo);

    /**
     * 动态中修改到店状态
     * @param personId 学员id
     * @param classStores 到店状态：1是 0否
     * @return 记录数
     */
    int updateClassStoresByPersonId(int personId,int classStores);

    /*
     * @Author James
     * @Description 常用上课时间段列表
     * @Date 19:58 2019/1/22
     * @Param
     * @return
     **/
    List<StuPreferences> selectOftenClassTimeConf();

    /*
     * @Author James
     * @Description 查询学员偏好设置选项
     * @Date 19:58 2019/1/22
     * @Param
     * @return List<Map<String,Object>>
     **/
    List<Map<String, Object>> selectSceneInfo(Integer personId);


    /*
     * @Author James
     * @Description 添加学员偏好
     * @Date 14:21 2019/1/24
     * @Param
     * @return
     **/
    int addSceneInfo(JSONObject jsonObject, String addUserName);

    /*
     * @Author James
     * @Description 根据cc ssc 查询关联学生订单的60天到期信息或课时剩30以下
     * @Date 11:26 2018/12/28
     * @Param
     * @return
     **/
    PageInfo<LessonAndTeacher> selectFiveStartTeacher(int personId, int page, int size);


    /*
     * @Author James
     * @Description 黑名单 老师列表
     * @Date 14:44 2019/1/25
     * @Param
     * @return
     **/
    List<LessonAndTeacher> selectBlackList(int personId);

    /*
     * @Author James
     * @Description 删除黑名单老师
     * @Date 14:28 2019/1/25
     * @Param
     * @return
     **/
    int delBadTeacher(int id);

    /**
     * 老师列表
     *
     * @param teacherLogin
     * @return
     */
    List<LessonAndTeacher> searchByTeacherName(String teacherLogin);


    /*
     * @Author James
     * @Description 添加黑名单老师
     * @Date 12:44 2019/1/26
     * @Param
     * @return
     **/
    int addBadTeacher(String teacherLogin, int personId);

    /**
     * 系统推荐老师老师
     *
     * @param page
     * @param size
     * @return
     */
    PageInfo<LessonAndTeacher> sysTeacherInfo(Integer page, Integer size, StuPreferences stuPreferences);

    /**
     * 常用老师资料卡片
     *
     * @param list
     * @return
     */
    List<LessonAndTeacher> commonlyUsedTeacherInfo(int personId);

    /**
     * 添加常用老师
     *
     * @param personId
     * @param teacherId
     * @return
     */
    int addCommonlyUsedTeacher(int personId, int teacherId);

    /**
     * 适合年龄段列表
     *
     * @return
     */
    List<GradeLevel> ageGroupList();

    /**
     * 教学风格列表
     *
     * @return
     */
    List<GradeLevel> teachingStyleList();


    /*
     * @Author James
     * @Description 保存学员偏好
     * @Date 11:06 2019/1/28
     * @Param
     * @return
     **/
    int saveStuPrefer(StuPreferences stuPreferences);

    /**
     * 查询 stuPrefer
     *
     * @param personId
     * @return
     */
    StuPreferences stuPrefer(int personId);

    /**
     * 查询学员年龄
     *
     * @param personId
     * @return
     */
    StudentInfo stuAge(int personId);

    /**
     * 学员 常用上课时间列表
     *
     * @param personId
     * @return
     */
    List<StuPreferences> stuPreferListByPersonId(int personId);

    /*
     * @Author James
     * @Description pcp  学员 基本信息
     * @Date 15:06 2019/2/21
     * @Param
     * @return
     **/
    StudentInfo pcpInfo(int personId);

    /**
     * 查询学员最后一节课程的星星
     *
     * @param personId 学员ID
     * @return 结果
     */
    Integer selectLastLessonStar(int personId);


    /**
     * 更新pcp学员信息
     *
     * @param personId           学员ID
     * @param learningDifficulty 学习困难
     * @return
     */
    int updatePcpInfo(int personId, String learningDifficulty);

    /**
     * 查询学员客户属性
     *
     * @param personId 学员id
     * @return 学员客户属性
     */
    Map<String, Object> searchRevisitByPersonId(Integer personId);

    /**
     * 查询店铺信息，学员列表里使用
     *
     * @param listIds 已选id
     * @return
     */
    List<Map<String, Object>> searchSelectListByStuList(List<Integer> listIds);

    /**
     * 查询渠道分类信息，学员列表查询用
     *
     * @param listIds 已选的渠道id
     * @return
     */
    List<Map<String, Object>> searchChannelInfo(List<Integer> listIds);

    /**
     * 学员属性下拉列表
     *
     * @param listIds
     * @return
     */
    List<Map<String, Object>> stateListMap(List<Integer> listIds, List<Integer> parentIds);

    /*
     * @Author James
     * @Description 查询所有主店跟分店
     * @Date 19:33 2019/3/7
     * @Param
     * @return
     **/
    List<Stores> searchStores();


    /**
     * @return
     * @Author James
     * @Description 学员基本信息列表
     * @Date 16:28 2019/3/8
     * @Param
     **/
    Map<String, Object> getStudentList(PersonParamter personParamter);

    Stores selectStoreInfoById(int storesId);

    /**
     * 抢单
     *
     * @param personId
     * @param ccId
     * @param storesId
     * @param flag
     * @param maxRobCase
     * @return
     */
    int setCc(int personId, int ccId, int storesId, int flag, int maxRobCase,String phone,int isSms,String contactTime,String studentLogin);

    /**
     * 批量插入  转单  更改cc  操作日志
     *
     * @param list
     * @return
     */
    int addGrabOrderLogs(List<GrabOrderLogs> list);

    /**
     * 查询该学员原来 cc  ssc
     *
     * @param personId
     * @return
     */
    Person selectOldCCOrSsc(int personId);

    /*
     * @Author James
     * @Description 删除学员
     * @Date 15:55 2019/3/20
     * @Param
     * @return
     **/
    int delPerson(int state, int personId);

    /*
     * @Author James
     * @Description 批量转移
     * @Date 11:31 2019/3/25
     * @Param
     * @return
     **/
    int batchTransfer(String strIds, Integer ccId, Integer sscId, Integer bccId);


    /*
     * @Author James
     * @Description 添加 学员基本信息
     * @Date 16:34 2019/3/25
     * @Param
     * @return
     **/
    int addStuInfo(StudentInfo studentInfo) throws IOException;

    /**
     * 添加奖学金记录
     *
     * @param record 奖学金信息
     * @return 记录数
     */
    int insertScholarship(StudentScholarship record);

    /**
     * 查询奖学金金额
     *
     * @param personId 用户id
     * @return 奖学金
     */
    Map<String, Object> selectStudentScholarship(Integer personId);

    /**
     * 支付定金保留奖学金名额
     *
     * @param personId 用户id
     * @return 记录数
     */
    int updateStateByScholarshipByPersonId(Integer personId);

    /*
     * @Author James
     * @Description 导出 excel 列表数据
     * @Date 15:39 2019/3/28
     * @Param
     * @return
     **/
    List<StudentInfo> exportPersonList(PersonParamter personParamter);
}
